The proliferation of client computing devices—such as smart phones and tablets—has drastically changed the manner in which software applications are designed and executed. Some software applications—such as games—are designed to run independently on client computing devices and require little or no interaction with a server. Other software applications—such as photo sharing applications—rely on accessing server computing devices that are designed to interact with the software applications. Notably, implementing and managing such server computer devices can be complicated and expensive, and often exceeds the resources that are available to the average developer. To address this problem, “cloud computing” services were created, which provide scalable computing resources that remove the necessity for a developer to implement his or her own server computing devices.
Notably, existing approaches used to implement and manage cloud computing services are quite complex and require considerable overhead, especially when seeking to meet customer demands for both high availability and high scalability. First, high availability represents a system design approach that guarantees that a particular portion of servers and databases (e.g., 75%) are always functioning properly and online. This typically requires system administrators to be physically onsite to swap out ill-functioning hardware, which is expensive and susceptible to shortcomings and human error. Next, high scalability represents a system design approach that enables the number of servers and databases to dynamically increase or decrease in number. This typically involves system administrators upgrading hardware and updating a configuration that defines the hierarchy and structure of the system—which, similar to the high-availability issues described above—is susceptible to shortcomings and human error.